onkeltortyfandomcom_de-20200213-history
C++/Irrlicht/Das erste Projekt
Irrlicht mit Code::Blocks Bevor man das erste Projekt mit Irrlicht erstellt, muss man sich festlegen, wie man Irrlicht in das neue Projekt einbinden will. Dies kann *'dynamisch' durch das Verwenden der Irrlicht.dll oder *'statisch' durch das Verwenden der erzeugten Irrlicht.a - Library sein. Je nachdem, wie man sich entscheidet, muss die Irrlicht-Engine unterschiedlich aus dem Quellcode heraus kompiliert werden. Dynamisches Linken Um die Datei "Irrlicht.dll" und die zur DLL zugehörige Datei "Irrlicht.a" zu erhalten, muss man wie im Kapitel "Der Start mit Irrlicht" vorgehen. Hier wählt man als Build-Target die Option "Win 32 - Release - accurate math - dll" aus, um eine Dynamic Link Library (DLL) mit genauen Mathematikfunktionen erhält. Bei der heutigen Prozessorleistung ist die Option "Win 32 - Release - fast math - dll" zwar auch möglich, jedoch sollte kein merkbarer Unterschied mehr in der Ausführungsgeschwindigkeit merkbar sein. Nachdem man die Irrlicht-Engine neu erstellt hat, kopiert man sich aus dem Verzeichnis '/bin/Win32-gcc/ die Dateien *Irrlicht.dll und *Irrlicht.a in das Unterverzeichnis "lib" des Projektordners des neuen Projekts. Die Datei Irrlicht.dll kapselt die Irrlicht Engine innerhalb einer Dynamic Link Library und die Datei "Irrlicht.a" beschreibt die exportierten Funktionen der Datei Irrlicht.dll, welche dann in das neue Programm eingebunden werden, um auf die Irrlicht Engine innerhalb der Irrlicht.dll zugreifen zu können. Um Zugriff auf die Funktionen der Irrlicht Engine zu erhalten, kopiert man den Ordner '/include in den Projektordner des neuen Projekts, damit man in den Projektoptionen des neuen Projekts die Headerdateien von Irrlicht einbinden kann. Erstellen des neuen Projekts Im Moment hat man einen Projektordner, in welchem *das Unterverzeichnis "lib" existiert, welcher die 2 Dateien "Irrlicht.dll" und "Irrlicht.a" enthält sowie *das Unterverzeichnis "include", welches alle Dateien aus dem Ordner '/include enthält. Nun führt man folgende Schritte aus: #Man wählt in Code::Blocks im Hauptmenü "File" → "New" → "Project" #Im darauf erscheinenden Dialog wählt man "Console Application" und klickt auf die Taste "Go" #Danach wählt man "C++" als Programmiersprache aus und klickt auf die Taste "Next" #Nun gibt man einen Projekttitel ein und ändert den Pfad, in welchem das Projekt erstellt werden soll, auf unseren Projektordner ab. Im Feld "Resulting filename" ändert man die Pfadangabe so ab, dass die Projektdatei "*.cbp" im Grundverzeichnis des Projektordners angelegt wird und kein Unterordner mit dem Projekttitel erstellt wird. Nun klickt man auf die Taste "Next". #Wir kontrollieren, dass als Compiler der "GNU GCC Compiler" ausgewählt ist. Hier kann man sich die Debug-Konfiguration sparen, da kein Code debuggt werden soll. Eine Release-Konfiguration reicht, weshalb man den Haken bei "Create Debug Configuration" entfernt und auf die Taste "Finish" klickt. Um die Datei "Irrlicht.a", welche die Funktionen der Datei "Irrlicht.dll" beschreibt, mit in das Programm einzubinden, wählt man im Hauptverzeichnis von Code::Blocks "Projekt" → "Build Options". Im darauf erscheinenden Dialog gilt es zu beachten, dass im linken Bereich der Eintrag "'''Release" ausgewählt ist, um die Einstellungen für diese Build - Option vorzunehmen. Nun wählt man den Reiter "Linker Settings" und klickt unter dem Feld "Link libraries" auf die Taste "Add". Dort wählt man nun die Datei "Irrlicht.a" aus dem Unterverzeichnis "lib" des Projektordners aus. Die Frage "Keep this as relative Path?" bejaht man durch einen Klick auf die entsprechende Taste. Als nächstes wählt man im selben Dialog den Reiter "Search Directories" und dort den Reiter "Compiler" aus. Hier klickt man auf die Taste "Add" und wählt das Unterverzeichnis "include" des Projektordners aus. Die Frage "Keep this as relative Path?" bejaht man durch einen Klick auf die entsprechende Taste. Da nun * die Datei "Irrlicht.a" verknüpft ist und * der Pfad zu den Irrlicht-Headerdateien angegeben ist kann man die Build-Options wieder schliessen. Als nächstes öffnet man die Hauptquellcodedatei "main.cpp" in der Baumansicht des Projekts und ersetzt den von Code::Blocks eingesetzten Quellcode durch folgenden: //Header-Datei zur Ausgabe von Text in der Konsole #include //Header-Datei zur Verwendung von Irrlicht #include //Header-Datei für "System"-Befehl #include //Namespace für die Standard-Funktionen der Konsole using namespace std; //Namespace für die Standard-Funktionen von Irrlicht using namespace irr; //Unsere Hauptprogrammfunktion int main() { //Erstellung des Irrlicht-Device IrrlichtDevice *device = createDevice( video::EDT_OPENGL, //Verwendung von OpenGL core::dimension2d(640, 480), //Fenstergröße 640 x 480 Pixel 32, //32 Bit Farbtiefe false); //Kein Vollbild //Konnte das Irrlicht-Device nicht erstellt werden ? if (device 0) { //Fehlermeldung in der Konsole ausgeben cout << "Das Irrlicht-Device konnte nicht erstellt werden !" << endl; //Tastendruck abwarten system("pause"); //Programm beenden return 1; } //Fenstertitel festlegen device->setWindowCaption(L"Ein Irrlicht-Fenster"); //Den Videotreiber abholen video::IVideoDriver* driver = device->getVideoDriver(); //Eine Variable zum abspeichern der FPS (Bilder pro Sekunde) u32 frames=0; //Solange Irrlicht aktiv ist ... while(device->run()) { //Szene beginnen driver->beginScene(true, //Backbuffer an true, //Z-Puffer an video::SColor(0,100,100,100)); /* Hier werden die Objekte gezeichnet ... */ //Szene beenden driver->endScene(); //Alle 100 Bilder ... if (++frames 100) { //Fenstertitel zusammenbasteln core::stringw str = L"Ein Irrlicht-Fenster mit "; str += (s32)driver->getFPS(); str += L" FPS in "; str += driver->getName(); device->setWindowCaption(str.c_str()); frames=0; } } //Programm beenden ? -> Irrlicht-Device löschen device->drop(); //Programm beenden ... return 0; } Erstellt man nun das Programm durch die Tastenkombination Strg + F9, so erstellt der Linker im Unterverzeichnis "/bin/Release" die ausführbare Datei {Projekttitel}.exe. Da diese ohne die Bibliotheksdatei "Irrlicht.dll" nicht lauffähig ist, muss man diese noch aus dem Unterordner "lib" des Projektverzeichnisses zur ausführbaren Datei des Projekts verschieben. Als Ergebnis sollte man folgendes Fenster erhalten: Datei:C_Irrlicht_DasErsteProjekt_1.png Statisches Linken Das statische Linken funktioniert wie unter "Der Start mit Irrlicht" beschrieben, wobei man unter den Build-Options nur 2 mögliche Optionen hat: *"Win32 - Release - accurate math - static" *"Win32 - Release - fast math - static" Für einen leistungsschwacheren Rechner empfiehlt sich die Build-Option "Win32 - Release - fast math - static", da diese zwar etwas ungenauer rechnet, aber dafür weniger Leistung benötigt. Andernfalls wählt man die Build-Option "Win32 - Release - accurate math - static". Nachdem man den Build-Vorgang mit Strg + F9 gestartet hat und dieser abgeschlossen ist, findet man im Verzeichnis '/bin/Win32-gcc/ die Library-Datei '''libIrrlicht.a, welche die Irrlicht-Engine kapselt. Diese Datei kopiert man in das Unterverzeichnis "lib" in den Projektordner des neuen Projekts. Erstellen des neuen Projekts Im Moment hat man einen Projektordner, in welchem *das Unterverzeichnis "lib" existiert, welches die Datei "libIrrlicht.a" enthält *das Unterverzeichnis "include", welches alle Dateien aus dem Ordner '/include enthält. Nun führt man folgende Schritte aus: #Man wählt in Code::Blocks im Hauptmenü "File" → "New" → "Project" #Im darauf erscheinenden Dialog wählt man "Console Application" und klickt auf die Taste "Go" #Danach wählt man "C++" als Programmiersprache aus und klickt auf die Taste "Next" #Nun gibt man einen Projekttitel ein und ändert den Pfad, in welchem das Projekt erstellt werden soll, auf unseren Projektordner ab. Im Feld "Resulting filename" ändert man die Pfadangabe so ab, dass die Projektdatei "*.cbp" im Grundverzeichnis des Projektordners angelegt wird und kein Unterordner mit dem Projekttitel erstellt wird. Nun klickt man auf die Taste "Next". #Wir kontrollieren, dass als Compiler der "GNU GCC Compiler" ausgewählt ist. Hier kann man sich die Debug-Konfiguration sparen, da kein Code debuggt werden soll. Eine Release-Konfiguration reicht, weshalb man den Haken bei "Create Debug Configuration" entfernt und auf die Taste "Finish" klickt. Um die Datei "libIrrlicht.a", welche die Irrlicht Engine als Bibliotheksdatei enthält, mit in das Programm einzubinden, wählt man im Hauptverzeichnis von Code::Blocks "Projekt" → "Build Options". Im darauf erscheinenden Dialog gilt es zu beachten, dass im linken Bereich der Eintrag "'''Release" ausgewählt ist, um die Einstellungen für diese Build - Option vorzunehmen. Nun wählt man den Reiter "Linker Settings" und klickt unter dem Feld "Link libraries" auf die Taste "Add". Dort wählt man nun die Datei "libIrrlicht.a" aus dem Unterverzeichnis "lib" des Projektordners aus. Die Frage "Keep this as relative Path?" bejaht man durch einen Klick auf die entsprechende Taste. Als nächstes wählt man im selben Dialog den Reiter "Search Directories" und dort den Reiter "Compiler" aus. Hier klickt man auf die Taste "Add" und wählt das Unterverzeichnis "include" des Projektordners aus. Die Frage "Keep this as relative Path?" bejaht man durch einen Klick auf die entsprechende Taste. Hinzufügen der fehlenden Libraries Bei der Verwendung der Irrlicht Engine über die statisch ins Programm eingebundene Bibliotheksdatei "libIrrlicht.a" ist zu beachten, dass alle zusätzlichen Systembibliotheken nicht automatisch mit in das Programm eingebunden werden. Verwendet man die Irrlicht Engine als DLL, so werden diese Bindungen vom Projekt her automatisch eingebunden, jedoch nicht beim statischen Linken. Dies muss manuell erfolgen. Deshalb sind folgende Schritte nötig:"thumb|Linker-Einstellungen #Man stellt sicher, dass man die Build-Options geöffnet hat, die Option "Release" gewählt ist und sich im Reiter "Linker settings" befindet. #Nun klickt man auf die Taste "Add" und gibt im Dialog "Add library" den Text opengl32 ein und klickt auf die Taste "Ok". Dies bindet die OpenGL-Bibliothek mit ein. #Das selbige wiederholt man und gibt im Dialog "Add library" den Text "gdi32" ein und klickt die Taste "Ok". Dies bindet die Bibliothek für die Grafikverarbeitung mit ein. #Nun wiederholt man das selbige nochmal und gibt den Text "winmm" ein. Hierdurch bindet man die Bibliothek für die Windows Multimedia-API mit ein. Dies sind die 3 grundlegenden Bibliotheken, mit welcher das Projekt kompiliert werden muss, um Irrlicht verwenden zu können. Je nach Bedarf und Umfang des Projekts sind allerdings noch weitere Bibliotheken erforderlich. Hier eine kurze Liste: Definieren als statische Library Es muss dem Compiler nun noch mitgeteilt werden, dass hier eine statische Library von Irrlicht verwendet wird. Dies geht durch die Definition von _IRR_STATIC_LIB_, welches entweder vor der Einbindung der Irrlicht-Headerdatei im Code erfolgen muss oder durch globale Definition in den Compilereinstellungen des Projekts. Will man dies im Quellcode tun, so muss man dies vor der Einbindung der Datei Irrlicht.h erledigen: //Irrlicht als statische Library einbinden #define _IRR_STATIC_LIB_ //Header-Datei zur Verwendung von Irrlicht #include //Header-Datei zur Ausgabe von Text in der Konsole #include //Header-Datei für "System"-Befehl #include (...) Alternativ kann man dies auch in den Compilereinstellungen unter den Build-Options im Reiter "defines" tun: Compilereinstellungen mit define Da nun *die Datei "libIrrlicht.a" verknüpft ist, *die nötigen Systembibliotheken eingebunden sind, *dem Compiler mitgeteilt wurde, dass Irrlicht als statische Datei eingebunden wird und *der Pfad zu den Irrlicht-Headerdateien angegeben ist kann man die Build-Options wieder schliessen. Als nächstes öffnet man die Hauptquellcodedatei "main.cpp" in der Baumansicht des Projekts und ersetzt den von Code::Blocks eingesetzten Quellcode durch den bereits oben aufgeführten. Kategorie:C++ Kategorie:Irrlicht